package vip.xiaonuo.app.modular.auth.service;


import vip.xiaonuo.app.modular.appuser.entity.AppUser;
import vip.xiaonuo.core.pojo.login.AppLoginUser;

/**
 * <p>Title : app认证相关service</p>
 * <p>Description : </p>
 * <p>DevelopTools : IDEA</p>
 * <p>DevelopSystem : Windows11</p>
 *
 * @Author : zxw
 * @Date 2023/9/11 15:39
 */
public interface AppAuthService {


    /**
     * 账号 密码  验证码  登录
     * 业务说明：判断所有前置条件
     * 账号密码是否正确 正确执行finalLogin
     * finalLogin方法  执行token生成  执行redis缓存插入 执行spring 登录上下文插入 执行token给前端
     *
     * @param loginName
     * @param password
     * @return
     */
    String initLogin(String loginName, String password, String smsCode);

    /**
     * 根据initLogin的信息执行 最终生产token 登录操作
     *
     * @param appUser
     * @return
     */
    String finalLogin(AppUser appUser);

    /**
     * 据系统用户构造用户登陆信息-API
     *
     * @param appUser
     * @return
     */
    AppLoginUser genSysLoginCustomer(AppUser appUser);

    /**
     * 设置SpringSecurityContext上下文，方便获取用户 - API
     *
     * @param appLoginUser 当前登录用户信息
     */
    void setSpringSecurityContextAuthentication(AppLoginUser appLoginUser);


    /**
     * 根据token获取登录用户信息
     *
     * @param token token
     * @return 当前登陆的用户信息
     * @author xuyuxiang
     * @date 2020/3/13 11:59
     */
    AppLoginUser getAppLoginUserByToken(String token);

    /**
     * 注册
     *
     * @param loginName
     * @return
     */
    boolean initRegister(String loginName);


    /**
     * 退出登录清空redis
     */
    void logout();
}
